home *** CD-ROM | disk | FTP | other *** search
/ Assassins - Ultimate CD Games Collection 4 / Assassins 4 (1999)(Weird Science).iso / misc / omega / source / itemf3.c < prev    next >
C/C++ Source or Header  |  1997-05-02  |  17KB  |  741 lines

  1. /* omega copyright (C) 1987,1988,1989 by Laurence Raphael Brothers */
  2. /* itemf3.c */
  3.  
  4. /* mostly artifact and stick functions */
  5.  
  6. #include "glob.h"
  7.  
  8. /* amulet of the planes */
  9. void i_planes(o)
  10. pob o;
  11. {
  12.   if (Player.mana < 1) print1("The amulet spits some multicolored sparks.");
  13.   else {
  14.     print1("You focus mana into the amulet....");
  15.     Player.mana = max(0,Player.mana-100);
  16.     dataprint();
  17.     morewait();
  18.     strategic_teleport(1);
  19.   }
  20. }
  21.  
  22.  
  23. /* the sceptre of high magic */
  24. void i_sceptre(o)
  25. pob o;
  26. {
  27.   if (HiMagicUse == Date) 
  28.     print1("The Sceptre makes a sort of dull 'thut' noise.");
  29.   else {
  30.     HiMagicUse = Date;
  31.     print1("With a shriek of tearing aether, a magic portal appears!");
  32.     print2("Step through? [yn] ");
  33.     if (ynq()=='y') change_environment(E_COURT);
  34.   }
  35.   print1("The sceptre seems to subside. You hear a high whine, as of");
  36.   print2("capacitors beginning to recharge.");
  37.   morewait();
  38. }
  39.  
  40.  
  41. /* the star gem */
  42. void i_stargem(o)
  43. pob o;
  44. {
  45.   if (StarGemUse == Date) {
  46.     print1("The Star Gem glints weakly as if to say:");
  47.     print2("'You have used me overmuch.'");
  48.     print3("and it vanishes a puff of regret.");
  49.     Objects[o->id].uniqueness = UNIQUE_UNMADE;
  50.         /* it's now out there, somewhere */
  51.     dispose_lost_objects(1,o);
  52.   }
  53.   else {
  54.     StarGemUse = Date;
  55.     if (o->blessing < 1) {
  56.       print1("The Star Gem shines brightly and emits a musical tone.");
  57.       print2("You see a dark cloud roil away from it.");
  58.       morewait();
  59.       o->blessing = 10;
  60.     }
  61.     print1("The star gem flares with golden light!");
  62.     morewait();
  63.     if (Player.status[ILLUMINATION] < 1000) {
  64.       print1("Interesting, you seem to be permanently accompanied");
  65.       print2("by a friendly lambent glow....");
  66.       morewait();
  67.       Player.status[ILLUMINATION] = 1500;
  68.     }
  69.     print1("You suddenly find yourself whisked away by some unknown force!");
  70.     morewait();
  71.     setgamestatus(COMPLETED_ASTRAL);
  72.     change_environment(E_COUNTRYSIDE);
  73.     Player.x = 61;
  74.     Player.y = 3;
  75.     screencheck(3);
  76.     drawvision(Player.x,Player.y);
  77.     locprint("Star Peak");
  78.     Country[Player.x][Player.y].current_terrain_type =
  79.       Country[Player.x][Player.y].base_terrain_type;
  80.     c_set(Player.x, Player.y, CHANGED);
  81.     print2("The Star Gem's brilliance seems to fade.");
  82.   }
  83. }
  84.  
  85.  
  86. /* wand of fear */
  87. void i_fear(o)
  88. pob o;
  89. {
  90.   int x=Player.x,y=Player.y;
  91.   Objects[o->id].known = 1;
  92.   o->known = max(1,o->known);
  93.   setspot(&x,&y);
  94.   if (o->blessing < 0) {
  95.     x = Player.x;
  96.     y = Player.y;
  97.   }
  98.   inflict_fear(x,y);
  99. }
  100.  
  101.     
  102.  
  103. void i_juggernaut(o)
  104. pob o;
  105. {
  106.   int d,x=Player.x,y=Player.y;
  107.   int seen = 1, not_seen = 0;
  108.   int tunneled = 0;
  109.  
  110.   print1("You activate the Juggernaut of Karnak!");
  111.   if (! o->known) {
  112.     print2("Uh, oh, it's coming this way!");
  113.     p_death("the Juggernaut of Karnak");
  114.   }
  115.   else {
  116.     d = getdir();
  117.     if (d == ABORT)
  118.       print2("You deactivate the Juggernaut before it escapes.");
  119.     else {
  120.       print1("Vroom! ");
  121.       while (inbounds(x+Dirs[0][d],y+Dirs[1][d])) {
  122.     x+=Dirs[0][d];
  123.     y+=Dirs[1][d];
  124.     if (!view_unblocked(x, y) || offscreen(y))
  125.       seen = 0;
  126.     if (Level->site[x][y].locchar == WALL)
  127.       tunneled++;
  128.     if (Level->site[x][y].locchar != WATER &&
  129.       Level->site[x][y].locchar != VOID_CHAR &&
  130.       Level->site[x][y].locchar != ABYSS &&
  131.       Level->site[x][y].locchar != SPACE &&
  132.       Level->site[x][y].locchar != LAVA)
  133.     {
  134.       Level->site[x][y].locchar = FLOOR;
  135.       Level->site[x][y].p_locf = L_NO_OP;
  136.     }
  137.     lreset(x, y, SECRET);
  138.     lset(x, y, CHANGED);
  139.     if (Level->site[x][y].creature != NULL) {
  140.       if (seen)
  141.         nprint1("Splat! ");
  142.       else
  143.         not_seen++;
  144.       setgamestatus(SUPPRESS_PRINTING);
  145.       m_death(Level->site[x][y].creature);
  146.       resetgamestatus(SUPPRESS_PRINTING);
  147.     }
  148.     plotspot(x, y, FALSE);
  149.     omshowcursor(x, y);
  150.       }
  151.       if (not_seen > 6)
  152.     print2("You hear many distant screams...");
  153.       else if (not_seen > 3)
  154.     print2("You hear several distant screams...");
  155.       else if (not_seen > 1)
  156.     print2("You hear a couple of distant screams...");
  157.       else if (not_seen == 1)
  158.     print2("You hear a distant scream...");
  159.       gain_experience(1000);
  160.       dispose_lost_objects(1,o);
  161.       Level->tunnelled += tunneled - 1;
  162.       tunnelcheck();
  163.     }
  164.   }
  165. }
  166.  
  167.  
  168. void i_symbol(o)
  169. pob o;
  170. {
  171.   int i;
  172.   if (! o->known)
  173.     print1("Nothing seems to happen.");
  174.   /* if o->charge != 17, then symbol was stolen from own high priest! */
  175.   else if ((o->aux != Player.patron) || (o->charge != 17)){
  176.     print1("You invoke the deity...");
  177.     print2("...who for some reason seems rather annoyed at you...");
  178.     print3("You are enveloped in Godsfire!");
  179.     morewait();
  180.     for(;Player.hp>1;Player.hp--) {
  181.       dataprint();
  182.       morewait();
  183.       for(i=0;i<MAXITEMS;i++)
  184.     if (Player.possessions[i] != NULL)
  185.       dispose_lost_objects(Player.possessions[i]->number,
  186.                    Player.possessions[i]);
  187.       Player.mana = 0;
  188.     }
  189.   }
  190.   else if (SymbolUseHour == hour()) {
  191.     print1("Your deity frowns upon this profligate use of power...");
  192.     print2("Shazam! A bolt of Godsfire! Your symbol shatters!");
  193.     dispose_lost_objects(1,o);
  194.     Player.hp = 1;
  195.     dataprint();
  196.   }
  197.   else {
  198.     print1("A mystic flow of theurgic energy courses through your body!");
  199.     SymbolUseHour = hour();
  200.     cleanse(1);
  201.     heal(10);
  202.     Player.mana = max(Player.mana,calcmana());
  203.   }
  204. }
  205.  
  206.  
  207.  
  208. void i_crystal(o)
  209. pob o;
  210. {
  211.   if (!o->known) print1("You can't figure out how to activate this orb.");
  212.   else {
  213.     print1("You gaze into your crystal ball.");
  214.     if (ViewHour == hour()) print2("All you get is Gilligan's Island reruns.");
  215.     else if ((o->blessing<0) || (Player.iq+Player.level < random_range(30))) {
  216.       ViewHour = hour();
  217.       print2("Weird interference patterns from the crystal fog your mind....");
  218.       amnesia();
  219.     }
  220.     else {
  221.       ViewHour = hour();
  222.       print2("You sense the presence of life...");
  223.       mondet(1);
  224.       morewait();
  225.       print2("You sense the presence of objects...");
  226.       objdet(1);
  227.       morewait();
  228.       print2("You begin to see visions of things beyond your ken....");
  229.       hint();
  230.     }
  231.   }
  232. }
  233.     
  234. void i_antioch(o)
  235. pob o;
  236. {
  237.   int x=Player.x,y=Player.y;
  238.   int count;
  239.   if (!o->known){
  240.     print1("Ka-Boom!");
  241.     print2("You seem to have annihilated yourself.");
  242.     p_death("the Holy Hand-Grenade of Antioch");
  243.   }
  244.   else {
  245.     print1("Bring out the Holy Hand-Grenade of Antioch!");
  246.     setspot(&x,&y);
  247.     print2("Ok, you pull the pin.....");
  248.     morewait();
  249.     print1("What do you count up to? ");
  250.     count = (int) parsenum();
  251.     if ((count < 3)&&(Level->site[x][y].creature!=NULL)) {
  252.       print1("`Three shall be the number of thy counting....");
  253.       print2("And the number of thy counting shall be three.'");
  254.       print3("Your target picks up the grenade and throws it back!");
  255.       morewait();
  256.       clearmsg();
  257.       print1("Ka-Boom!");
  258.       p_death("the Holy Hand-Grenade of Antioch");
  259.     }
  260.     else if (count>3) {
  261.       print1("`Three shall be the number of thy counting.");
  262.       print2("And the number of thy counting shall be three.'");
  263.       morewait();
  264.       clearmsg();
  265.       print1("Ka-Boom!");
  266.       p_death("the Holy Hand-Grenade of Antioch");
  267.     }
  268.     else {
  269.       print1("Ka-Boom!");
  270.       gain_experience(1000);
  271.       Level->site[x][y].locchar = TRAP;
  272.       Level->site[x][y].p_locf = L_TRAP_DOOR;
  273.       lset(x, y, CHANGED);
  274.       if (Level->site[x][y].creature != NULL) {
  275.     m_death(Level->site[x][y].creature);
  276.     print2("You are covered with gore.");
  277.       }
  278.       Level->site[x][y].things = NULL;
  279.     }
  280.   }
  281.   dispose_lost_objects(1,o);
  282. }
  283.  
  284. void i_kolwynia(o)
  285. pob o;
  286. {
  287.   int i;
  288.   if (! o->known) {
  289.     print1("You destroy youself with a mana storm. How sad.");
  290.     p_death("Kolwynia, The Key That Was Lost");
  291.   }
  292.   else {
  293.     gain_experience(5000);
  294.     print1("You seem to have gained complete mastery of magic.");
  295.     Player.pow = Player.maxpow = 2*Player.maxpow;
  296.     for(i=0;i<NUMSPELLS;i++)
  297.       Spells[i].known = TRUE;
  298.   }
  299.   dispose_lost_objects(1,o);
  300. }
  301.  
  302. void i_enchantment(o)
  303. pob o;
  304. {
  305.   char response;
  306.   if (ZapHour == hour()) 
  307.     print1("The staff doesn't seem to have recharged yet.");
  308.   else if (! o->known) {
  309.     ZapHour = hour();
  310.     print1("You blast the staff backwards....");
  311.     dispel(-1);
  312.   }
  313.   else {
  314.     ZapHour = hour();
  315.     print1("Zap with white or black end [wb] ");
  316.     do response = (char) mcigetc();
  317.     while ((response != 'w') && (response != 'b'));
  318.     print2("The staff discharges!");
  319.     if (response == 'w') enchant(o->blessing*2+1);
  320.     else dispel(o->blessing);
  321.   }
  322. }
  323.  
  324. void i_helm(o)
  325. pob o;
  326. {
  327.   if (HelmHour == hour()) 
  328.     print1("The helm doesn't seem to have recharged yet.");
  329.   else if (! o->known) {
  330.     HelmHour = hour();
  331.     print1("You put the helm on backwards....");
  332.     p_teleport(-1);
  333.   }
  334.   else {
  335.     HelmHour = hour();
  336.     print1("Your environment fades.... and rematerializes.");
  337.     p_teleport(o->blessing);
  338.   }
  339. }
  340.  
  341.  
  342. void i_death(o)
  343. pob o;
  344. {
  345.   clearmsg();
  346.   print1("Bad move...");
  347.   p_death("the Potion of Death");
  348. }
  349.  
  350. void i_life(o)
  351. pob o;
  352. {
  353.   clearmsg();
  354.   print1("Good move.");
  355.   Player.hp = Player.maxhp = 2 * Player.maxhp;
  356.   dispose_lost_objects(1,o);
  357. }
  358.  
  359.  
  360.  
  361. /* f = fire, w = water, e = earth, a = air, m = mastery */
  362. int orbcheck(element)
  363. char element;
  364. {
  365.   char response;
  366.   print1("The orb begins to glow with increasing intensity!");
  367.   print2("You have the feeling you need to do something more....");
  368.   morewait();
  369.   print1("Burn it in fire [f] ");
  370.   print2("Douse it with water [w] ");
  371.   morewait();
  372.   print1("Smash it against the earth [e] ");
  373.   print2("Toss is through the air [a] ");
  374.   morewait();
  375.   print1("Mix the above actions, doing them in sequence [m] ");
  376.   do {
  377.     print2("Which one [f,w,e,a,m] ");
  378.     response = (char) mcigetc();
  379.   } while ((response != 'f') &&
  380.        (response != 'w') &&
  381.        (response != 'e') &&
  382.        (response != 'a') &&
  383.        (response != 'm'));
  384.   return(response == element);
  385. }
  386.  
  387. /* orb functions */
  388. void i_orbfire(o)
  389. pob o;
  390. {
  391.   if (! orbcheck('f')) {
  392.     print1("Bad choice!");
  393.     print2("The Orb of Fire blasts you!");
  394.     fball(Player.x,Player.y,Player.x,Player.y,250);
  395.     o->known = 1;
  396.   }
  397.   else {
  398.     print1("The Orb of Fire flares a brilliant red!");
  399.     Spells[S_FIREBOLT].known = TRUE;
  400.     gain_experience(10000);
  401.     Player.immunity[FLAME]+=100;
  402.     print2("You feel fiery!");
  403.     o->plus = 100;
  404.     o->blessing = 100;
  405.     i_firebolt(o);
  406.   }
  407.   *o = Objects[ARTIFACTID+5];
  408. }
  409.  
  410.  
  411. void i_orbwater(o)
  412. pob o;
  413. {
  414.   if (! orbcheck('w')) {
  415.     print1("A serious mistake!");
  416.     print2("The Orb of Water blasts you!");
  417.     heal(-250);
  418.     o->known = 1;
  419.   }
  420.   else {
  421.     print1("The Orb of Water pulses a deep green!");
  422.     Spells[S_DISRUPT].known = TRUE;
  423.     Player.immunity[POISON]+=100;
  424.     gain_experience(10000);
  425.     print2("You feel wet!");
  426.     o->plus = 100;
  427.     o->blessing = 100;
  428.     i_disrupt(o);
  429.   }
  430.   *o = Objects[ARTIFACTID+5];
  431. }
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438. void i_orbearth(o)
  439. pob o;
  440. {
  441.   int i;
  442.   if (! orbcheck('e')) {
  443.     print1("What a maroon!");
  444.     print2("The Orb of Earth blasts you!");
  445.     Player.con -= 10;
  446.     if (Player.con < 3)
  447.       p_death("congestive heart failure");
  448.     else {
  449.       print3("Your possessions disintegrate!");
  450.       for (i=0;i<MAXITEMS;i++)
  451.     if (Player.possessions[i] != NULL) 
  452.       dispose_lost_objects(Player.possessions[i]->number,
  453.                    Player.possessions[i]);
  454.       for (i=0;i<MAXPACK;i++) 
  455.     if (Player.pack[i] != NULL) {
  456.       free((char *) Player.pack[i]);
  457.       Player.pack[i] = NULL;
  458.     }
  459.       Player.packptr = 0;
  460.       o->known = 1;
  461.     }
  462.   }
  463.   else {
  464.     print1("The Orb of Earth emanates a brownish aura!");
  465.     Spells[S_DISINTEGRATE].known = TRUE;
  466.     gain_experience(10000);
  467.     Player.immunity[NEGENERGY]+=100;
  468.     print2("You feel earthy!");
  469.     o->plus = 100;
  470.     o->blessing = 100;
  471.     i_disintegrate(o);
  472.   }
  473.   *o = Objects[ARTIFACTID+5];
  474. }
  475.  
  476.  
  477. void i_orbair(o)
  478. pob o;
  479. {
  480.   if (! orbcheck('a')) {
  481.     print1("You lose!");
  482.     print2("The Orb of Air blasts you!");
  483.     lball(Player.x,Player.y,Player.x,Player.y,100);
  484.     o->known = 1;
  485.   }
  486.   else {
  487.     print1("The Orb of Air flashes blue!");
  488.     Spells[S_LBALL].known = TRUE; /* lball */
  489.     gain_experience(10000);
  490.     print2("You feel airy!");
  491.     Player.immunity[ELECTRICITY]+=100;
  492.     o->plus = 100;
  493.     o->blessing = 100;
  494.     i_invisible(o);
  495.     i_lbolt(o);
  496.   }
  497.   *o = Objects[ARTIFACTID+5];
  498. }
  499.  
  500.  
  501. void i_orbmastery(o)
  502. pob o;
  503. {
  504.  
  505.   if (! orbcheck('m')) {
  506.     print1("A fatal error!");
  507.     print2("The Orb of Mastery blasts you to cinders!");
  508.     p_death("playing with the Orb of Mastery");
  509.     o->known = 1;
  510.   }
  511.   else if ((find_and_remove_item(ARTIFACTID+1,-1)) &&
  512.        (find_and_remove_item(ARTIFACTID+2,-1)) &&
  513.        (find_and_remove_item(ARTIFACTID+3,-1)) &&
  514.        (find_and_remove_item(ARTIFACTID+4,-1))) {
  515.     print1("The Orb of Mastery radiates rainbow colors!");
  516.     print2("You feel godlike.");
  517.     Player.iq = Player.maxiq = 2 * Player.maxiq;
  518.     Player.pow = Player.maxpow = 2 * Player.maxpow;
  519.     Player.str = Player.maxstr = 2 * Player.maxstr;
  520.     Player.dex = Player.maxdex = 2 * Player.maxdex;
  521.     Player.con = Player.maxcon = 2 * Player.maxcon;
  522.     Player.agi = Player.maxagi = 2 * Player.maxagi;
  523.     dataprint();
  524.     morewait();
  525.     print1("You have been imbued with a cosmic power....");
  526.     morewait();
  527.     wish(1);
  528.     morewait();
  529.     clearmsg();
  530.     print2("You feel much more experienced.");
  531.     gain_experience(20000);
  532.     *o = Objects[ARTIFACTID+5];
  533.   }
  534.   else {
  535.     print1("The Orb of Mastery's power is unbalanced!");
  536.     print2("The Orb of Mastery blasts you to cinders!");
  537.     p_death("playing with the Orb of Mastery");
  538.   }  
  539. }
  540.  
  541.  
  542. void i_orbdead(o)
  543. pob o;
  544. {
  545.   int i;
  546.   print1("The burnt-out orb drains all your energy!");
  547.   for(i=0;i<NUMSPELLS;i++)
  548.     Spells[i].known = FALSE;
  549.   print2("You feel not at all like a mage.");
  550.   for(i=0;i<MAXITEMS;i++) {
  551.     if (Player.possessions[i] != NULL) {
  552.       Player.possessions[i]->plus = 0;
  553.       if (Player.possessions[i]->usef > 100)
  554.     Player.possessions[i]->usef = I_NOTHING;
  555.     }
  556.   }
  557.   print3("A storm of mundanity surounds you!");
  558.   level_drain(Player.level-1,"a Burnt-out Orb");
  559.   Player.mana = 0;
  560.   Player.pow -= 10;
  561. }
  562.  
  563.  
  564.  
  565. void i_dispel(o)
  566. pob o;
  567. {
  568.   dispel((o->blessing > -1) ? o->blessing+random_range(3): o->blessing);
  569. }
  570.  
  571.  
  572. /* stick functions */
  573.  
  574.  
  575. /* wand of apportation */
  576. void i_apport(o)
  577. pob o;
  578. {
  579.   o->known = max(1,o->known);
  580.   Objects[o->id].known = 1;
  581.   apport(o->blessing);
  582. }
  583.  
  584. /* staff of firebolts */
  585. void i_firebolt(o)
  586. pob o;
  587. {
  588.   int x=Player.x,y=Player.y;
  589.   o->known = max(1,o->known);
  590.   Objects[o->id].known = 1;
  591.   setspot(&x,&y);
  592.   if (o->blessing < 0) {
  593.     x = Player.x;
  594.     y = Player.y;
  595.   }
  596.   fbolt(Player.x,Player.y,x,y,Player.dex*2+Player.level,75);
  597. }
  598.  
  599.  
  600. void i_disintegrate(o)
  601. pob o;
  602. {
  603.   int x=Player.x,y=Player.y;
  604.   o->known = max(1,o->known);
  605.   Objects[o->id].known = 1;
  606.   setspot(&x,&y);
  607.   if (o->blessing < 0) {
  608.     x = Player.x;
  609.     y = Player.y;
  610.   }
  611.   disintegrate(x,y);
  612. }
  613.  
  614. void i_disrupt(o)
  615. pob o;
  616. {
  617.   int x=Player.x,y=Player.y;
  618.   o->known = max(1,o->known);
  619.   Objects[o->id].known = 1;
  620.   setspot(&x,&y);
  621.   if (o->blessing < 0) {
  622.     x = Player.x;
  623.     y = Player.y;
  624.   }
  625.   disrupt(x,y,100);
  626. }
  627.  
  628.  
  629. /* staff of lightning bolts */
  630. void i_lbolt(o)
  631. pob o;
  632. {
  633.   int x=Player.x,y=Player.y;
  634.   o->known = max(1,o->known);
  635.   Objects[o->id].known = 1;
  636.   setspot(&x,&y);
  637.   if (o->blessing < 0) {
  638.     x = Player.x;
  639.     y = Player.y;
  640.   }
  641.   lbolt(Player.x,Player.y,x,y,Player.dex*2+Player.level,75);
  642. }
  643.  
  644. /* wand of magic missiles */
  645. void i_missile(o)
  646. pob o;
  647. {
  648.   int x=Player.x,y=Player.y;
  649.   o->known = max(1,o->known);
  650.   Objects[o->id].known = 1;
  651.   setspot(&x,&y);
  652.   if (o->blessing < 0) {
  653.     x = Player.x;
  654.     y = Player.y;
  655.   }
  656.   nbolt(Player.x,Player.y,x,y,Player.dex*2+Player.level,20);
  657. }
  658.  
  659. /* wand of fire balls */
  660. void i_fireball(o)
  661. pob o;
  662. {
  663.   int x=Player.x,y=Player.y;
  664.   Objects[o->id].known = 1;
  665.   o->known = max(1,o->known);
  666.   setspot(&x,&y);
  667.   if (o->blessing < 0) {
  668.     x = Player.x;
  669.     y = Player.y;
  670.   }
  671.   fball(Player.x,Player.y,x,y,35);
  672. }
  673.  
  674.  
  675. /* wand of snowballs */
  676. void i_snowball(o)
  677. pob o;
  678. {
  679.   int x=Player.x,y=Player.y;
  680.   Objects[o->id].known = 1;
  681.   o->known = max(1,o->known);
  682.   setspot(&x,&y);
  683.   if (o->blessing < 0) {
  684.     x = Player.x;
  685.     y = Player.y;
  686.   }
  687.   snowball(Player.x,Player.y,x,y,20);
  688. }
  689.  
  690. /* wand of lightning balls */
  691. void i_lball(o)
  692. pob o;
  693. {
  694.   int x=Player.x,y=Player.y;
  695.   Objects[o->id].known = 1;
  696.   o->known = max(1,o->known);
  697.   setspot(&x,&y);
  698.   if (o->blessing < 0) {
  699.     x = Player.x;
  700.     y = Player.y;
  701.   }
  702.   lball(Player.x,Player.y,x,y,50);
  703. }
  704.  
  705. /* staff of sleep */
  706. void i_sleep_other(o)
  707. pob o;
  708. {
  709.   Objects[o->id].known = 1;
  710.   o->known = max(1,o->known);
  711.   sleep_monster(o->blessing);
  712. }
  713.  
  714. /* rod of summoning */
  715. /* rod of summoning now always summons as if cursed */
  716. void i_summon(o)
  717. pob o;
  718. {
  719.   Objects[o->id].known = 1;
  720.   o->known = max(1,o->known);
  721.   summon(-1,-1);
  722. }
  723.  
  724. void i_hide(o)
  725. pob o;
  726. {
  727.   int x=Player.x,y=Player.y;
  728.   Objects[o->id].known = 1;
  729.   o->known = max(1,o->known);
  730.   setspot(&x,&y);
  731.   hide(x,y);
  732. }
  733.  
  734. void i_polymorph(o)
  735. pob o;
  736. {
  737.   Objects[o->id].known = 1;
  738.   o->known = max(1,o->known);
  739.   polymorph(o->blessing);
  740. }
  741.